/* Includes ------------------------------------------------------------------*/
#include "gpio.h"
/* USER CODE BEGIN 0 */
extern char s_QCk1flag, s_QCk2flag , s_SwitchOLED, s_ClearOLED, s_UserShow;
/* USER CODE END 0 */

/*----------------------------------------------------------------------------*/
/* Configure GPIO                                                             */
/*----------------------------------------------------------------------------*/
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/** Configure pins as 
        * Analog 
        * Input 
        * Output
        * EVENT_OUT
        * EXTI
        * Free pins are configured automatically as Analog (this feature is enabled through 
        * the Code Generation settings)
*/
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, JDQ1_Pin|GPIO_PIN_13|GPIO_PIN_14|JDQ2_Pin 
                          |GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, STATE_Pin|RGB_G_Pin|RGB_R_Pin|RGB_B_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = KEY2_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(KEY2_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : PA5 PA7 PA8 PA11 
                           PA12 PA13 PA14 */
  GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_11 
                          |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pins : PB0 PB2 PB12 PB15 */
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_12|GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /*Configure GPIO pins : PBPin PB13 PB14 PBPin 
                           PBPin PBPin PBPin PBPin 
                           PB8 PB9 */
  GPIO_InitStruct.Pin = JDQ1_Pin|GPIO_PIN_13|GPIO_PIN_14|JDQ2_Pin 
                          |STATE_Pin|RGB_G_Pin|RGB_R_Pin|RGB_B_Pin 
                          |GPIO_PIN_8|GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = KEY1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : PH3 */
  GPIO_InitStruct.Pin = GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);

  /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

}

/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	static char cCnt = 0;
  if (GPIO_Pin == GPIO_PIN_13){
    /* Toggle LED2 */
		cCnt++;
		if(1 == cCnt){
			HAL_GPIO_WritePin(GPIOB, RGB_R_Pin, GPIO_PIN_RESET);
		}else if(2 == cCnt){
			HAL_GPIO_WritePin(GPIOB, RGB_G_Pin, GPIO_PIN_RESET);
		}else if(3 == cCnt){
			HAL_GPIO_WritePin(GPIOB, RGB_B_Pin, GPIO_PIN_RESET);
		}else if(4 == cCnt){
			HAL_GPIO_WritePin(GPIOB, RGB_G_Pin|RGB_R_Pin|RGB_B_Pin, GPIO_PIN_SET);
			cCnt = 0;
		}
		s_QCk1flag = 1;
  }else if (GPIO_Pin == GPIO_PIN_15){
    /* Toggle LED2 */
		s_QCk2flag = 1;
		HAL_GPIO_TogglePin(GPIOB, JDQ1_Pin|JDQ2_Pin);
		s_SwitchOLED++;
		s_ClearOLED = 1;
		s_UserShow = 0;
		if(3 == s_SwitchOLED){s_SwitchOLED = 0;}
  }
}

void GPIO_Disable(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	//GPIO_InitStructure.Pin = GPIO_PIN_All;
  GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStructure.Pull = GPIO_NOPULL;
	
	GPIO_InitStructure.Pin = GPIO_PIN_0|KEY2_Pin|GPIO_PIN_1|GPIO_PIN_6|GPIO_PIN_4;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.Pin = GPIO_PIN_13|GPIO_PIN_14|STATE_Pin|GPIO_PIN_8|GPIO_PIN_9;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.Pin = KEY1_Pin;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
}
/* USER CODE END 2 */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
